package com.sdtv.basemodule.image;

import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.sdtv.basemodule.image.transform.GlideRoundTransform;

import java.io.File;

/**
 * @ProjectName: MediunFusion
 * @Package: com.sdtv.basemodule.image
 * @ClassName: GlideProcessor
 * @Description: 加载图片的具体实现。
 * @Author: 小郭同学
 * @CreateDate: 2019-07-08 16:49
 * @UpdateRemark: 更新说明
 * @Version: 1.0
 */
public class GlideProcessor implements ImageLoaderInterface {

    private ImageConfig config;

    // 设置图片加载config
    @Override
    public void setImageConfig(ImageConfig imageConfig) {
        this.config = imageConfig;
    }

    /**
     * 加载网络图片
     *
     * @param context
     * @param imageView 加载图片控件
     * @param url       图片地址
     */
    @Override
    public void loadImageFromNet(Context context, ImageView imageView, String url) {
        Glide.with(context).applyDefaultRequestOptions(getDefaultOptions()).load(url).into(imageView);
    }

    /**
     * 加载文件
     *
     * @param context
     * @param imageView 加载图片控件
     * @param filePath  文件路径
     */
    @Override
    public void loadImageFromSd(Context context, ImageView imageView, String filePath) {
        Glide.with(context).applyDefaultRequestOptions(getDefaultOptions()).load(new File(filePath)).into(imageView);
    }

    /**
     * 加载资源文件
     *
     * @param context
     * @param imageView  加载图片控件
     * @param resourceId 资源文件ID
     */
    @Override
    public void loadImageFromAssert(Context context, ImageView imageView, int resourceId) {

        Glide.with(context).applyDefaultRequestOptions(getDefaultOptions())
                .load(resourceId).into(imageView);
    }

    /**
     * 加载图片 设置圆角
     *
     * @param context
     * @param imageView     加载图片的控件
     * @param url           URL地址
     * @param placeHolderId 占位符 默认图
     * @param errorId       错误默认图
     * @param radius        图片圆角角度
     * @param scaleType     加载图片的方式
     */
    @Override
    public void loadImageFormNet(Context context, ImageView imageView, String url, int placeHolderId,
                                 int errorId, int radius, ImageView.ScaleType scaleType) {

        Glide.with(context).applyDefaultRequestOptions(getOptions(placeHolderId, errorId, radius, scaleType))
                .load(url).into(imageView);
    }

    /**
     * 加载本地图片
     *
     * @param context
     * @param imageView     加载图片的控件
     * @param filePath      文件路径
     * @param placeHolderId 占位符 默认图
     * @param errorId       错误默认图
     * @param radius        图片圆角角度
     * @param scaleType     加载图片的方式
     */
    @Override
    public void loadImageFormSd(Context context, ImageView imageView, String filePath,
                                int placeHolderId, int errorId, int radius,
                                ImageView.ScaleType scaleType) {
        Glide.with(context).applyDefaultRequestOptions(getOptions(placeHolderId, errorId, radius, scaleType))
                .load(new File(filePath)).into(imageView);

    }

    /**
     * @param context   上下文环境
     * @param imageView 图片控件
     * @param url       图片网络地址
     */
    @Override
    public void loadCircleImgFromUrl(Context context, ImageView imageView, String url) {
        Glide.with(context).applyDefaultRequestOptions(getDefaultOptions().circleCrop())
                .load(url).into(imageView);
    }

    /**
     * @param context   上下文环境
     * @param imageView 图片控件
     * @param filePath  图片SD卡地址
     */
    @Override
    public void loadCircleImgFromSd(Context context, ImageView imageView, String filePath) {
        Glide.with(context).applyDefaultRequestOptions(getDefaultOptions().circleCrop())
                .load(new File(filePath)).into(imageView);
    }

    /**
     * @param context   上下文环境
     * @param imageView 图片控件
     * @param url       网络图地址
     * @param radius    圆角大小
     */
    @Override
    public void loadImgWithRadius(Context context, ImageView imageView, String url, int radius) {
        Glide.with(context).applyDefaultRequestOptions(
                getDefaultOptions().transform(new GlideRoundTransform(context, radius)))
                .load(url).into(imageView);
    }

    /**
     * 设置默认图片格式
     *
     * @return
     */
    public RequestOptions getDefaultOptions() {
        RequestOptions requestOptions = new RequestOptions();
        if (null != config) {
            requestOptions.error(config.getErrorImgId()).
                    placeholder(config.getDefaultImgId());
        }
        return requestOptions;
    }

    /**
     * 设置options
     *
     * @param placeHolderId
     * @param errorId
     * @param radius
     * @param scaleType
     * @return
     */
    public RequestOptions getOptions(int placeHolderId,
                                     int errorId, int radius, ImageView.ScaleType scaleType) {
        RequestOptions requestOptions = new RequestOptions()
                .error(errorId)
                .placeholder(placeHolderId)
                .transform(new RoundedCorners(radius));
        if (ImageView.ScaleType.CENTER == scaleType) {
            requestOptions.centerInside();
        } else if (ImageView.ScaleType.CENTER_CROP == scaleType) {
            requestOptions.centerCrop();
        } else if (ImageView.ScaleType.FIT_CENTER == scaleType) {
            requestOptions.fitCenter();
        }
        return requestOptions;
    }


}
